package com.db.system.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.db.system.enums.DataSourceType;


/**
 * 数据源切换处理
 * @Package: com.db.system.config
 * @ClassName: DynamicDataSourceContextHolder.java
 * @Description:数据源切换处理
 * 
 * @author kaifa008
 * @date 2022年1月18日 下午3:29:26
 * @Copyright: 2022 Copyright (c) 2018 LgSteel
 */
public class DynamicDataSourceContextHolder {
 
    private static final Logger logger = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
    /**
     * 使用ThreadLocal维护变量，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
     *  所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
     */
    private static final ThreadLocal<DataSourceType> CONTEXT_HOLDER = new ThreadLocal<>();
 
    /**
     * 设置数据源的变量
     */
    public static void setDataSourceType(DataSourceType dataSourceType) {
        logger.info("切换到{{}}数据源", dataSourceType);
        CONTEXT_HOLDER.set(dataSourceType);
    }
 
    /**
     * 获得数据源的变量
     */
    public static DataSourceType getDataSourceType() {
        return CONTEXT_HOLDER.get();
    }
 
    /**
     * 清空数据源变量
     */
    public static void clearDataSourceType() {
        CONTEXT_HOLDER.remove();
    }
    
}

